package main.java.maziacs.rol;

import main.java.maziacs.ITile;
import main.java.maziacs.characters.IHero;
import main.java.maziacs.characters.Maziacs;
import main.java.maziacs.counters.Sword;
import main.java.maziacs.squares.ICircle;
import main.java.maziacs.squares.White;


public class WithoutMaziacs extends Rol {

	public WithoutMaziacs(IHero hero){
		super(hero);
	}
	
		
		/**
		 */
		public void moveWithoutMaziacs(){
			//Primero exploramos
			getHero().explore();
			ITile tile=getHero().getPosition().getTile();
			//Comprobamos si alguna de las casillas adyacentes es circular
			White w=(White)getHero().getPosition().getSquare();
			if(w.AdjacentToCircle()){
					ICircle c=w.getCircleAdjacent();
					/*Si es circular miramos si contiene contador y es distinto de espada
					 * y entonces lo cogemos llamando al o si siendo espada, 
					 * no teniamos ni espada ni tesoro chooseTakeOrLeaveCounter()*/
					if(c.containsCounter() && (!(c.getCounters() instanceof Sword) ||
							(c.getCounters() instanceof Sword && !getHero().hasSword() 
									&& !getHero().hasTreasure()))){
						getHero().getGame().getIntUsu().chooseTakeOrLeaveCounter(getHero());
					}
			}
			//Luego movemos al heroe a la casilla que elijamos
			getHero().getGame().getIntUsu().chooseSquareToMoveHero(getHero());
			//Si hemos cambiado de loseta perdemos un punto de energia
			if(!tile.equals(getHero().getLastPosition().getTile()))
				getHero().setEnergy(getHero().getEnergy()-1);
			/*Vemos si algun maziac ve al heroe*/
			for(Maziacs m: getHero().getBoard().getMaziacs().keySet()){
				Boolean see=false;
				/*Si no lo ve se mueve y mira si ahora lo puede ver*/
				if(!m.seeHero(getHero())){
					m.moveWithoutHero(getHero());
					if(m.seeHero(getHero()))
						see=true;
				}
				/*Si algun maziac ve al heroe se cambia el rol del heroe*/
				else if(m.seeHero(getHero()) || see){
					getHero().setRol(new WithMaziacs(getHero()));
				}
			}

		}

}
